Page({
  data: {
    idcardFrontUrl: '/static/images/avatar_1.jpg',
    idcardBackUrl: '/static/images/avatar_2.jpg',
    point: '', // 小区
    building: '', // 楼栋
    room: '', // 房间号
    name: '吕布', // 姓名
    gender: 1, // 性别
    mobile: '18888888888' // 手机号
  },
  goList() {
    wx.reLaunch({
      url: '/house_pkg/pages/list/index',
    })
  },
  removePicture(ev) {
    // 移除图片的类型（身份证正面或反面）
    // ?. 可选链操作符
    // ? 号左边的值不为 undefined 或 null 才往右边取值，否则直接返回 undefined
    const type = ev.mark?.type
    this.setData({
      [type]: ''
    })
  },
  onLoad({
    point,
    building,
    room,
    id
  }) {
    if (id) {
      // 编辑
      wx.setNavigationBarTitle({
        title: '编辑房屋信息',
      })
      // 根据 id 查询详情并填充
      this.getHouseDetail(id)
    } else {
      this.setData({
        point: decodeURIComponent(point),
        building: decodeURIComponent(building),
        room
      })
    }
  },
  async getHouseDetail(id) {
    const {
      code,
      data: houseDetail
    } = await wx.http.get(`/room/${id}`)
    if (code !== 10000) return wx.utils.toast('获取房屋信息失败')
    // 填充信息到模板
    this.setData({
      ...houseDetail,
    })
  },
  verifyName() {
    const reg = /^[\u4e00-\u9fa5]{2,5}$/
    const valid = reg.test(this.data.name.trim())
    if (!valid) wx.utils.toast('姓名填写有问题')
    return valid
  },
  verifyMobile() {
    const reg = /^1[3-9]\d{9}$/
    const valid = reg.test(this.data.mobile.trim())
    if (!valid) wx.utils.toast('手机号填写有问题')
    return valid
  },
  verifyIdCard() {
    const valid = !!this.data.idcardFrontUrl && !!this.data.idcardBackUrl
    if (!valid) wx.utils.toast('身份证填写有问题')
    return valid
  },
  async submitForm() {
    if (!this.verifyName()) return
    if (!this.verifyMobile()) return
    if (!this.verifyIdCard()) return

    // 这个属性后端是不需要的
    delete this.data.__webviewId__
    // #1 编辑的时候是不允许传 status 的
    delete this.data.status

    // 这个接口后端会自动的根据有无 ID 来区分是编辑还是添加
    const {
      code
    } = await wx.http.post('/room', this.data)
    if (code !== 10000) return wx.utils.toast('添加房屋失败')
    wx.navigateBack({
      // #2
      delta: this.data.id ? 2 : 4
    })
  },
  async uploadPicture(ev) {
    // console.log(ev.mark.type)
    // 调用相册
    const r = await wx.chooseMedia({
      count: 1,
      mediaType: ['image'],
      sizeType: ['compressed']
    })
    wx.uploadFile({
      filePath: r.tempFiles[0].tempFilePath,
      name: 'file',
      url: wx.http.baseURL + '/upload',
      formData: {
        type: 'avatar'
      },
      header: {
        Authorization: getApp().token
      },
      success: (res) => {
        this.setData({
          [ev.mark.type]: JSON.parse(res.data).data.url
        })
      }
    })
  }
})